package com.hlt.utils;

import com.hlt.entity.Comments;
import com.hlt.entity.Users;
import com.hlt.vo.CommentsVO;
import org.springframework.beans.BeanUtils;

import java.util.*;
import java.util.stream.Collectors;

public class CommentsConvertUtil {

    /**
     * 将评论列表转换为VO对象列表
     * 
     * @param comments 评论实体列表
     * @param userMap  用户信息Map
     * @return VO列表
     */
    public static List<CommentsVO> convertToVOList(List<Comments> comments, Map<Integer, Users> userMap) {
        if (comments == null || comments.isEmpty()) {
            return new ArrayList<>();
        }
        return comments.stream().map(comment -> {
            CommentsVO vo = new CommentsVO();
            BeanUtils.copyProperties(comment, vo);

            // 设置用户信息
            Users users = userMap.get(comment.getUserId());
            if (users != null) {
                vo.setNickname(users.getNickName());
                vo.setAvatar(users.getAvatarUrl());
            }
            return vo;
        }).collect(Collectors.toList());
    }

    /**
     * 构建评论树形结构
     * 
     * @param allComments VO列表
     * @return 树形结构的VO列表
     */
    public static List<CommentsVO> buildCommentTree(List<CommentsVO> allComments) {
        if (allComments == null || allComments.isEmpty()) {
            return new ArrayList<>();
        }
        // 1. 将子评论按父ID分组（键：父评论ID，值：子评论列表）
        Map<Integer, List<CommentsVO>> parentMap = allComments.stream()
                .filter(comment -> comment.getParentId() != null)
                .collect(Collectors.groupingBy(CommentsVO::getParentId));

        // 2. 为每个父评论设置子评论列表
        allComments.forEach(comment -> {
            List<CommentsVO> children = parentMap.get(comment.getId());
            if (children != null) {
                comment.setChildren(children); // 关键：父评论的children字段存储子评论
            }
        });

        // 只返回一级评论
        return allComments.stream()
                .filter(comment -> comment.getParentId() == null)
                .collect(Collectors.toList());
    }
}